2025-01-29 IKT103 Datastrukturer og maler

Foreleser::Christian Auby
Fag:: ikt103
IKT103

[[#Video]]
[[#Presentasjon]]

Datastrukturer

Data vs datatyper vs datastrukturer

Primitive datatyper

Sammensatte datatyper

Plain old data

Eksempel struct med simple datatyper og ingen statiske medlemmer som er plain old data.

struct Account
{
	char ownerName[100];
	int accountNumber;
	float accountBalance;
}

Abstrakte datatyper (ADT)

std::map

std::map<int, std::string> students; // key, value, name
students[5] = "Lise Larsen"; // oppretter nøkkel dersom den ikke eksisterer
students[120] = "Fred Fredriksen";

for (auto &student : students) // auto iterator. Det på høyre side må være iterable
// & henter ut studenten som original (by-reference)
{
	std::cout << "Student" << student.first << ": " << student.second << std::endl;
}

Templates

template <class T>          // oppretter template
T sum(T num1, T num2) {     // bruker templaten i en funksjon
    return num1 + num2;
}

int main() {
	// avhengig av hvilken datatype vi kaller `sum` med nå, så forstår kompilatoren
	// hvilken datatype templaten skal benytte. IMPLISITT.
    int result = sum(2, 3); 
    double result2 = sum(2.3, 7.5);
}

Operator overloading

Operator overloading er en funksjon som er knyttet til en spesifikk datatypen. Operator overloadfunksjonen forteller kompilatoren hvordan den skal tolke en tidligere udefinert operator for datatypene. For eksempel kan vi selv definere hvordan vi skal «legge sammen» to instanser av klassen student

struct Student {
    int id;
    std::string name;
};

Student operator+(const Student &s1, const Student &s2) {
    Student temp;
    temp.id = s1.id + s2.id;
    temp.name = s1.name + s2.name;
    return temp;
}

int main() {
    Student s1, s2;
    Student s3 = s1 + s2;
}

Forelesningsslides

Video